

#ifndef __ZXPNT3D_H_
#define __ZXPNT3D_H_

#include "zgept3dar.h"
#include "zgepnt3d.h"
#include "zgevec3d.h"
#pragma pack (push, 8)

#ifndef ZXAUTOEXP
#ifdef ZXAUTO_DLL
	#define ZXAUTOEXP __declspec(dllexport)
#else
	#define ZXAUTOEXP __declspec(dllimport)
#endif
#endif

#pragma warning(disable : 4290) 

class ZXAUTOEXP UcAxPoint3d : public UcGePoint3d
{
public:
    
    UcAxPoint3d();
    UcAxPoint3d(double x, double y, double z);
    UcAxPoint3d(const UcGePoint3d& pt);
    UcAxPoint3d(const UcGeVector3d& pt);
   	UcAxPoint3d(const VARIANT* var) throw(HRESULT);
   	UcAxPoint3d(const VARIANT& var) throw(HRESULT);
   	UcAxPoint3d(const SAFEARRAY* safeArrayPt) throw(HRESULT);

   	UcAxPoint3d& operator=(const UcGePoint3d& pt);
   	UcAxPoint3d& operator=(const UcGeVector3d& pt);
   	UcAxPoint3d& operator=(const VARIANT* var) throw(HRESULT);
   	UcAxPoint3d& operator=(const VARIANT& var) throw(HRESULT);
   	UcAxPoint3d& operator=(const SAFEARRAY* safeArrayPt) throw(HRESULT);

    VARIANT* asVariantPtr() const throw(HRESULT);
    SAFEARRAY* asSafeArrayPtr() const throw(HRESULT);

    VARIANT& setVariant(VARIANT& var) const throw(HRESULT);
    VARIANT* setVariant(VARIANT* var) const throw(HRESULT);

private:
    UcAxPoint3d& fromSafeArray(const SAFEARRAY* safeArrayPt) throw(HRESULT);
};

#pragma warning(disable : 4275) 

class ZXAUTOEXP UcAxPoint3dArray : public UcGePoint3dArray
{
public:
    
   	UcAxPoint3dArray& append(const UcGePoint3d& pt);
   	UcAxPoint3dArray& append(const VARIANT* var) throw(HRESULT);
   	UcAxPoint3dArray& append(const VARIANT& var) throw(HRESULT);
   	UcAxPoint3dArray& append(const SAFEARRAY* safeArrayPt) throw(HRESULT);

    SAFEARRAY* asSafeArrayPtr() const throw(HRESULT);

    VARIANT& setVariant(VARIANT& var) const throw(HRESULT);
    VARIANT* setVariant(VARIANT* var) const throw(HRESULT);

private:
    UcAxPoint3dArray& fromSafeArray(const SAFEARRAY* safeArrayPt) throw(HRESULT);
};

#pragma pack (pop)
#endif
